home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-08-12 | 5.9 KB | 211 lines | [TEXT/PJMM] |
- {Black Hole Module Module.p}
-
- {A very simple graphics module for After Dark™}
- { Generic Shell by Patrick Beard and Bruce Burkhalter }
- { © 1989 Berkeley Systems Inc . }
- { module by Dave Kelly, © 1989 MacTutor}
-
- unit BlackHole;
-
- interface
-
- uses
- Quickdraw, GraphicsModuleTypes;
-
- function DoInitialize (var storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
-
- function DoBlank (storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
-
- function DoDrawFrame (storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
-
- function DoClose (storage: Handle; blankRgn: RgnHandle; params: GMParamBlockPtr): OSErr;
-
- function DoSetup (blankRgn: rgnHandle; message: integer; params: GMParamBlockPtr): OSErr;
-
- implementation
-
- type
- BHStorage = record
- CircleRect: Rect; {this is the rectangle for the circle to be drawn}
- CircleColor: integer;
- BlankingColor: integer;
- Center: Point;
- Origin: Point;
- ScreenRect: Rect;
- end;
- BHStoragePtr = ^BHStorage;
- BHStorageHandle = ^BHStoragePtr;
-
- function DoInitialize (var storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
-
- {Allocate memory and initialize variables here}
- var
- result: OSErr;
- myStorage: BHStorageHandle;
- begin
-
- { allocate handle to my storage }
-
- myStorage := BHStorageHandle(NewHandle(sizeof(BHStorage)));
-
- if MemError <> noErr then
- begin
- DoInitialize := MemError;
- exit(DoInitialize);
- end;
- MoveHHi(Handle(myStorage));
- HLock(Handle(myStorage)); { Lock it down. }
- myStorage^^.circlecolor := blackcolor;
- myStorage^^.blankingcolor := blackcolor;
- storage := Handle(myStorage);{ assign myStorage to passed handle }
- myStorage^^.screenrect := params^.qdGlobalsCopy^.qdScreenBits.bounds;
- myStorage^^.Center.h := params^.qdGlobalsCopy^.qdScreenBits.bounds.right div 2;
- myStorage^^.Center.v := params^.qdGlobalsCopy^.qdScreenBits.bounds.bottom div 2;
- myStorage^^.origin.h := 0;
- myStorage^^.origin.v := 0;
- myStorage^^.CircleRect := params^.qdGlobalsCopy^.qdScreenBits.bounds;
- InsetRect(myStorage^^.CircleRect, myStorage^^.Center.h, myStorage^^.Center.v);
- HUnlock(Handle(myStorage));
- DoInitialize := noErr;
-
- end;
-
- function DoBlank (storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
-
- begin
-
- {Blank the screen. You could also have "credits" appear on the screen here}
-
- FillRgn(blankRgn, params^.qdGlobalsCopy^.qdBlack);
- params^.brightness := params^.controlValues[1] * 255 div 100;
- DoBlank := noErr;
-
- end;
-
-
- function DoDrawFrame (storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
- var
- result: OSErr;
- myStorage: BHStoragePtr;{ to hold dereferenced storage handle }
- dh, dv: integer; {horiz and vert change parameters}
- begin
-
- {This function is repeatedly called by After Dark™. This is where the main drawing is done.}
- {lock our storage down so we can deference it once for faster access}
- MoveHHi(storage);
- HLock(storage);
- myStorage := BHStoragePtr(storage^);
- dv := -1;
- dh := -1;
- InsetRect(myStorage^.CircleRect, dh, dv);
- if PtInRect(myStorage^.Origin, myStorage^.CircleRect) then
- begin
- myStorage^.CircleRect := params^.qdGlobalsCopy^.qdScreenBits.bounds;
- InsetRect(myStorage^.CircleRect, myStorage^.Center.h, myStorage^.Center.v);
- forecolor(myStorage^.Blankingcolor);
- FillRgn(blankRgn, params^.qdGlobalsCopy^.qdBlack);
- if params^.controlValues[0] = 1 then
- case myStorage^.blankingcolor of
- blackcolor:
- myStorage^.blankingcolor := whitecolor;
- whitecolor:
- myStorage^.blankingcolor := redcolor;
- redcolor:
- myStorage^.blankingcolor := greencolor;
- greencolor:
- myStorage^.blankingcolor := bluecolor;
- bluecolor:
- myStorage^.blankingcolor := cyancolor;
- cyancolor:
- myStorage^.blankingcolor := magentacolor;
- magentacolor:
- myStorage^.blankingcolor := yellowcolor;
- yellowcolor:
- myStorage^.blankingcolor := blackcolor;
- otherwise
- myStorage^.blankingcolor := blackcolor;
- end
- else
- case myStorage^.blankingcolor of
- blackcolor:
- myStorage^.blankingcolor := whitecolor;
- whitecolor:
- myStorage^.blankingcolor := blackcolor;
- otherwise
- myStorage^.blankingcolor := blackcolor;
- end;
- end;
- if params^.controlValues[0] = 1 then
- case myStorage^.circlecolor of
- blackcolor:
- myStorage^.circlecolor := whitecolor;
- whitecolor:
- myStorage^.circlecolor := redcolor;
- redcolor:
- myStorage^.circlecolor := greencolor;
- greencolor:
- myStorage^.circlecolor := bluecolor;
- bluecolor:
- myStorage^.circlecolor := cyancolor;
- cyancolor:
- myStorage^.circlecolor := magentacolor;
- magentacolor:
- myStorage^.circlecolor := yellowcolor;
- yellowcolor:
- myStorage^.circlecolor := blackcolor;
- otherwise
- myStorage^.circlecolor := blackcolor;
- end
- else
- case myStorage^.circlecolor of
- blackcolor:
- myStorage^.circlecolor := whitecolor;
- whitecolor:
- myStorage^.circlecolor := blackcolor;
- otherwise
- myStorage^.circlecolor := blackcolor;
- end;
- params^.brightness := params^.controlValues[1] * 255 div 100;
- forecolor(myStorage^.circlecolor);
- frameoval(myStorage^.CircleRect);
- HUnlock(storage);
- DoDrawFrame := noErr;
-
- end;
-
- function DoClose (storage: Handle; blankRgn: RgnHandle; params: GMParamBlockPtr): OSErr;
-
- {Deallocate your memory here. You can also put something on the screen.}
- var
- myStorage: BHStorageHandle;
- begin
-
- {deallocate our storage}
-
- myStorage := BHStorageHandle(storage);
-
- if (myStorage <> nil) then
- begin
- MoveHHi(storage);
- HLock(storage);
- if (params^.colorQDAvail = true) then
- begin
- end;
- DisposHandle(storage);
- end;
-
- {check for memory errors}
-
- DoClose := noErr;
-
- end;
-
- function DoSetup (blankRgn: rgnHandle; message: integer; params: GMParamBlockPtr): OSErr;
- begin
-
- {This is called when the used clicks on a button in the Control Panel.}
- DoSetup := noErr;
-
- end;
-
- end.